package org.mte.sak.sort.comparator;

import java.util.Locale;

/**
 * Interfaccia di riferimento per un <i>Comparatore</i>
 *
 * @author Marco Traversari
 * @version $Revision: 1.2 $ $Date: 2011-12-27 11:42:34 $
 */
public interface Comparator {

    /**
     * Imposta il tipo di ordinamento.
     * Se <code>isAscending=true</code> sarà
     * un ordinamento ascendente, altrimenti discendente.
     *
     * @param isAscending
     */
	public void setAscending(boolean isAscending);

	/**
	 * Restituisce il valore formattato secondo
	 * il riferimento indicato.
	 *
 	 * @param value
	 * @param formatReference
	 * @return il valore formattato
	 */
  	public Object getValue(String value, Object formatReference);

	/**
	 * Restituisce il valore formattato secondo
	 * il riferimento indicato.
	 *
 	 * @param value
	 * @param formatReference
	 * @param locale
	 * @return il valore formattato
	 */
  	public Object getValue(String value, Object formatReference, Locale locale);
  	
  	/**
  	 * Confronta i valori dei due elementi specificati e restituisce
  	 * un tipo <code>boolean</code> in funzione dell'esito
  	 * della comparazione e del tipo di ordinamento impostato.
  	 *
  	 * @param obj1
  	 * @param obj2
  	 * @return true, false.
  	 */
    public boolean compare(Object obj1, Object obj2);

    /**
  	 * Confronta i valori dei due elementi specificati e restituisce
  	 * un tipo <code>int</code> in funzione dell'esito
  	 * della comparazione.
  	 *
     * @param obj1
     * @param obj2
     *
     * @return "0" se obj2 = obj1; "<0" se obj1 < obj2; ">0" obj1 > obj2.
     */
    public int compareOneToOne(Object obj1, Object obj2);
}
